Skip to content

Commit e0471a8

Browse files
committed
Sever window opener on manual navigation
https://bugs.webkit.org/show_bug.cgi?id=266354 rdar://118951619 Reviewed by Alex Christensen. When a user does a cross-origin manual navigation (e.g. navigating via the address bar, opening a bookmark, ...), then we should sever the window.opener reference. This should be safe since other browsers are already doing this: whatwg/html#6356. This requires propagating the existing isRequestFromClientOrUserInput flag from more callsites. Previously we were only setting that flag on NavigationAction after a fragment navigation. * Source/WebCore/loader/FrameLoader.cpp: (WebCore::FrameLoader::loadURL): (WebCore::FrameLoader::load): (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::reload): (WebCore::FrameLoader::loadPostRequest): (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): (WebCore::FrameLoader::loadDifferentDocumentItem): (WebCore::createWindow): * Source/WebCore/loader/NavigationAction.cpp: (WebCore::NavigationAction::NavigationAction): * Source/WebCore/loader/NavigationAction.h: * Source/WebCore/loader/PolicyChecker.cpp: (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy): * Source/WebCore/page/ContextMenuController.cpp: (WebCore::openNewWindow): * Source/WebKit/Shared/NavigationActionData.h: * Source/WebKit/Shared/NavigationActionData.serialization.in: * Source/WebKit/UIProcess/API/APINavigation.h: (API::Navigation::isRequestFromClientOrUserInput const): * Source/WebKit/UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): * Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::createWindow): * Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp: (WebKit::WebLocalFrameLoaderClient::didSameDocumentNavigationForFrameViaJSHistoryAPI): (WebKit::WebLocalFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): * Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.cpp: (WebKit::WebRemoteFrameClient::changeLocation): * Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Canonical link: https://commits.webkit.org/272321@main
1 parent 633fbf1 commit e0471a8

14 files changed

+158
-29
lines changed

Source/WebCore/loader/FrameLoader.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,7 +1480,7 @@ void FrameLoader::loadURL(FrameLoadRequest&& frameLoadRequest, const String& ref
14801480
if (!isNavigationAllowed())
14811481
return;
14821482

1483-
NavigationAction action { frameLoadRequest.requester(), request, frameLoadRequest.initiatedByMainFrame(), newLoadType, isFormSubmission, event, frameLoadRequest.shouldOpenExternalURLsPolicy(), frameLoadRequest.downloadAttribute() };
1483+
NavigationAction action { frameLoadRequest.requester(), request, frameLoadRequest.initiatedByMainFrame(), frameLoadRequest.isRequestFromClientOrUserInput(), newLoadType, isFormSubmission, event, frameLoadRequest.shouldOpenExternalURLsPolicy(), frameLoadRequest.downloadAttribute() };
14841484
action.setLockHistory(frameLoadRequest.lockHistory());
14851485
action.setLockBackForwardList(frameLoadRequest.lockBackForwardList());
14861486
action.setShouldReplaceDocumentIfJavaScriptURL(frameLoadRequest.shouldReplaceDocumentIfJavaScriptURL());
@@ -1585,7 +1585,7 @@ void FrameLoader::load(FrameLoadRequest&& request)
15851585
m_provisionalLoadHappeningInAnotherProcess = false;
15861586

15871587
if (request.shouldCheckNewWindowPolicy()) {
1588-
NavigationAction action { request.requester(), request.resourceRequest(), InitiatedByMainFrame::Unknown, NavigationType::Other, request.shouldOpenExternalURLsPolicy() };
1588+
NavigationAction action { request.requester(), request.resourceRequest(), InitiatedByMainFrame::Unknown, request.isRequestFromClientOrUserInput(), NavigationType::Other, request.shouldOpenExternalURLsPolicy() };
15891589
action.setNewFrameOpenerPolicy(request.newFrameOpenerPolicy());
15901590
policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request.resourceRequest()), { }, request.frameName(), [this] (const ResourceRequest& request, WeakPtr<FormState>&& formState, const AtomString& frameName, const NavigationAction& action, ShouldContinuePolicyCheck shouldContinue) {
15911591
continueLoadAfterNewWindowPolicy(request, formState.get(), frameName, action, shouldContinue, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress);
@@ -1733,8 +1733,7 @@ void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType t
17331733

17341734
if (shouldPerformFragmentNavigation(isFormSubmission, httpMethod, policyChecker().loadType(), newURL)) {
17351735
RefPtr oldDocumentLoader = m_documentLoader;
1736-
NavigationAction action { frame->protectedDocument().releaseNonNull(), loader->request(), InitiatedByMainFrame::Unknown, policyChecker().loadType(), isFormSubmission };
1737-
action.setIsRequestFromClientOrUserInput(loader->isRequestFromClientOrUserInput());
1736+
NavigationAction action { frame->protectedDocument().releaseNonNull(), loader->request(), InitiatedByMainFrame::Unknown, loader->isRequestFromClientOrUserInput(), policyChecker().loadType(), isFormSubmission };
17381737
oldDocumentLoader->setTriggeringAction(WTFMove(action));
17391738
oldDocumentLoader->setLastCheckedRequest(ResourceRequest());
17401739
policyChecker().stopCheck();
@@ -1753,8 +1752,10 @@ void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType t
17531752

17541753
policyChecker().stopCheck();
17551754
setPolicyDocumentLoader(loader);
1756-
if (loader->triggeringAction().isEmpty())
1757-
loader->setTriggeringAction({ frame->protectedDocument().releaseNonNull(), loader->request(), InitiatedByMainFrame::Unknown, policyChecker().loadType(), isFormSubmission });
1755+
if (loader->triggeringAction().isEmpty()) {
1756+
NavigationAction action { frame->protectedDocument().releaseNonNull(), loader->request(), InitiatedByMainFrame::Unknown, loader->isRequestFromClientOrUserInput(), policyChecker().loadType(), isFormSubmission };
1757+
loader->setTriggeringAction(WTFMove(action));
1758+
}
17581759

17591760
frame->navigationScheduler().cancel(NewLoadInProgress::Yes);
17601761

@@ -1908,7 +1909,7 @@ void FrameLoader::reload(OptionSet<ReloadOption> options)
19081909

19091910
// If we're about to re-post, set up action so the application can warn the user.
19101911
if (request.httpMethod() == "POST"_s)
1911-
loader->setTriggeringAction({ m_frame->protectedDocument().releaseNonNull(), request, InitiatedByMainFrame::Unknown, NavigationType::FormResubmitted });
1912+
loader->setTriggeringAction({ m_frame->protectedDocument().releaseNonNull(), request, InitiatedByMainFrame::Unknown, loader->isRequestFromClientOrUserInput(), NavigationType::FormResubmitted });
19121913

19131914
loader->setOverrideEncoding(m_documentLoader->overrideEncoding());
19141915

@@ -3313,7 +3314,7 @@ void FrameLoader::loadPostRequest(FrameLoadRequest&& request, const String& refe
33133314
if (RefPtr document = frame->document())
33143315
document->checkedContentSecurityPolicy()->upgradeInsecureRequestIfNeeded(workingResourceRequest, ContentSecurityPolicy::InsecureRequestType::Load);
33153316

3316-
NavigationAction action { request.requester(), workingResourceRequest, request.initiatedByMainFrame(), loadType, true, event, request.shouldOpenExternalURLsPolicy(), { } };
3317+
NavigationAction action { request.requester(), workingResourceRequest, request.initiatedByMainFrame(), request.isRequestFromClientOrUserInput(), loadType, true, event, request.shouldOpenExternalURLsPolicy(), { } };
33173318
action.setLockHistory(lockHistory);
33183319
action.setLockBackForwardList(request.lockBackForwardList());
33193320
action.setShouldReplaceDocumentIfJavaScriptURL(request.shouldReplaceDocumentIfJavaScriptURL());
@@ -3908,7 +3909,7 @@ void FrameLoader::continueLoadAfterNewWindowPolicy(const ResourceRequest& reques
39083909
mainFrame->protectedDocument()->setReferrerPolicy(frame->document()->referrerPolicy());
39093910
}
39103911

3911-
NavigationAction newAction { frame->protectedDocument().releaseNonNull(), request, InitiatedByMainFrame::Unknown, NavigationType::Other, action.shouldOpenExternalURLsPolicy(), nullptr, action.downloadAttribute() };
3912+
NavigationAction newAction { frame->protectedDocument().releaseNonNull(), request, InitiatedByMainFrame::Unknown, action.isRequestFromClientOrUserInput(), NavigationType::Other, action.shouldOpenExternalURLsPolicy(), nullptr, action.downloadAttribute() };
39123913
newAction.setShouldReplaceDocumentIfJavaScriptURL(action.shouldReplaceDocumentIfJavaScriptURL());
39133914
mainFrameLoader->loadWithNavigationAction(request, WTFMove(newAction), FrameLoadType::Standard, formState, allowNavigationToInvalidURL, ShouldTreatAsContinuingLoad::No);
39143915
}
@@ -4115,7 +4116,7 @@ void FrameLoader::loadDifferentDocumentItem(HistoryItem& item, HistoryItem* from
41154116
RefPtr documentLoader = cachedPage->documentLoader();
41164117
m_client->updateCachedDocumentLoader(*documentLoader);
41174118

4118-
auto action = NavigationAction { frame->protectedDocument().releaseNonNull(), documentLoader->request(), initiatedByMainFrame, loadType, false };
4119+
auto action = NavigationAction { frame->protectedDocument().releaseNonNull(), documentLoader->request(), initiatedByMainFrame, documentLoader->isRequestFromClientOrUserInput(), loadType, false };
41194120
action.setTargetBackForwardItem(item);
41204121
action.setSourceBackForwardItem(fromItem);
41214122
documentLoader->setTriggeringAction(WTFMove(action));
@@ -4167,10 +4168,10 @@ void FrameLoader::loadDifferentDocumentItem(HistoryItem& item, HistoryItem* from
41674168

41684169
if (cacheLoadPolicy == MayAttemptCacheOnlyLoadForFormSubmissionItem) {
41694170
request.setCachePolicy(ResourceRequestCachePolicy::ReturnCacheDataDontLoad);
4170-
action = { frame->protectedDocument().releaseNonNull(), request, initiatedByMainFrame, loadType, isFormSubmission, nullptr, shouldOpenExternalURLsPolicy };
4171+
action = { frame->protectedDocument().releaseNonNull(), request, initiatedByMainFrame, false, loadType, isFormSubmission, nullptr, shouldOpenExternalURLsPolicy };
41714172
} else {
41724173
request.setCachePolicy(ResourceRequestCachePolicy::ReturnCacheDataElseLoad);
4173-
action = { frame->protectedDocument().releaseNonNull(), request, initiatedByMainFrame, NavigationType::FormResubmitted, shouldOpenExternalURLsPolicy, nullptr };
4174+
action = { frame->protectedDocument().releaseNonNull(), request, initiatedByMainFrame, false, NavigationType::FormResubmitted, shouldOpenExternalURLsPolicy, nullptr };
41744175
}
41754176
} else {
41764177
switch (loadType) {
@@ -4204,7 +4205,7 @@ void FrameLoader::loadDifferentDocumentItem(HistoryItem& item, HistoryItem* from
42044205

42054206
ResourceRequest requestForOriginalURL(request);
42064207
requestForOriginalURL.setURL(itemOriginalURL);
4207-
action = { frame->protectedDocument().releaseNonNull(), requestForOriginalURL, initiatedByMainFrame, loadType, isFormSubmission, nullptr, shouldOpenExternalURLsPolicy };
4208+
action = { frame->protectedDocument().releaseNonNull(), requestForOriginalURL, initiatedByMainFrame, false, loadType, isFormSubmission, nullptr, shouldOpenExternalURLsPolicy };
42084209
}
42094210

42104211
action.setTargetBackForwardItem(item);
@@ -4486,7 +4487,7 @@ RefPtr<Frame> createWindow(LocalFrame& openerFrame, LocalFrame& lookupFrame, Fra
44864487
return nullptr;
44874488

44884489
ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy = shouldOpenExternalURLsPolicyToApply(openerFrame, request);
4489-
NavigationAction action { request.requester(), request.resourceRequest(), request.initiatedByMainFrame(), NavigationType::Other, shouldOpenExternalURLsPolicy };
4490+
NavigationAction action { request.requester(), request.resourceRequest(), request.initiatedByMainFrame(), request.isRequestFromClientOrUserInput(), NavigationType::Other, shouldOpenExternalURLsPolicy };
44904491
action.setNewFrameOpenerPolicy(features.wantsNoOpener() ? NewFrameOpenerPolicy::Suppress : NewFrameOpenerPolicy::Allow);
44914492
RefPtr page = oldPage->chrome().createWindow(openerFrame, features, action);
44924493
if (!page)

Source/WebCore/loader/NavigationAction.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ static NavigationType navigationType(FrameLoadType frameLoadType, bool isFormSub
100100
return NavigationType::Other;
101101
}
102102

103-
NavigationAction::NavigationAction(Document& requester, const ResourceRequest& originalRequest, InitiatedByMainFrame initiatedByMainFrame, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, Event* event, const AtomString& downloadAttribute)
103+
NavigationAction::NavigationAction(Document& requester, const ResourceRequest& originalRequest, InitiatedByMainFrame initiatedByMainFrame, bool isRequestFromClientOrUserInput, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, Event* event, const AtomString& downloadAttribute)
104104
: m_requester { NavigationRequester::from(requester) }
105105
, m_originalRequest { originalRequest }
106106
, m_keyStateEventData { keyStateDataForFirstEventWithKeyState(event) }
@@ -110,11 +110,11 @@ NavigationAction::NavigationAction(Document& requester, const ResourceRequest& o
110110
, m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy }
111111
, m_initiatedByMainFrame { initiatedByMainFrame }
112112
, m_treatAsSameOriginNavigation { shouldTreatAsSameOriginNavigation(requester, originalRequest.url()) }
113-
113+
, m_isRequestFromClientOrUserInput { isRequestFromClientOrUserInput }
114114
{
115115
}
116116

117-
NavigationAction::NavigationAction(Document& requester, const ResourceRequest& originalRequest, InitiatedByMainFrame initiatedByMainFrame, FrameLoadType frameLoadType, bool isFormSubmission, Event* event, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, const AtomString& downloadAttribute)
117+
NavigationAction::NavigationAction(Document& requester, const ResourceRequest& originalRequest, InitiatedByMainFrame initiatedByMainFrame, bool isRequestFromClientOrUserInput, FrameLoadType frameLoadType, bool isFormSubmission, Event* event, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, const AtomString& downloadAttribute)
118118
: m_requester { NavigationRequester::from(requester) }
119119
, m_originalRequest { originalRequest }
120120
, m_keyStateEventData { keyStateDataForFirstEventWithKeyState(event) }
@@ -124,6 +124,7 @@ NavigationAction::NavigationAction(Document& requester, const ResourceRequest& o
124124
, m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy }
125125
, m_initiatedByMainFrame { initiatedByMainFrame }
126126
, m_treatAsSameOriginNavigation { shouldTreatAsSameOriginNavigation(requester, originalRequest.url()) }
127+
, m_isRequestFromClientOrUserInput { isRequestFromClientOrUserInput }
127128
{
128129
}
129130

Source/WebCore/loader/NavigationAction.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ enum class MouseButton : int8_t;
5757
class NavigationAction {
5858
public:
5959
NavigationAction();
60-
WEBCORE_EXPORT NavigationAction(Document&, const ResourceRequest&, InitiatedByMainFrame, NavigationType = NavigationType::Other, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, Event* = nullptr, const AtomString& downloadAttribute = nullAtom());
61-
NavigationAction(Document&, const ResourceRequest&, InitiatedByMainFrame, FrameLoadType, bool isFormSubmission, Event* = nullptr, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, const AtomString& downloadAttribute = nullAtom());
60+
WEBCORE_EXPORT NavigationAction(Document&, const ResourceRequest&, InitiatedByMainFrame, bool, NavigationType = NavigationType::Other, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, Event* = nullptr, const AtomString& downloadAttribute = nullAtom());
61+
NavigationAction(Document&, const ResourceRequest&, InitiatedByMainFrame, bool, FrameLoadType, bool isFormSubmission, Event* = nullptr, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, const AtomString& downloadAttribute = nullAtom());
6262

6363
WEBCORE_EXPORT ~NavigationAction();
6464

Source/WebCore/loader/PolicyChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void FrameLoader::PolicyChecker::checkNavigationPolicy(ResourceRequest&& request
112112
{
113113
NavigationAction action = loader->triggeringAction();
114114
if (action.isEmpty()) {
115-
action = NavigationAction { *m_frame.document(), request, InitiatedByMainFrame::Unknown, NavigationType::Other, loader->shouldOpenExternalURLsPolicyToPropagate() };
115+
action = NavigationAction { *m_frame.document(), request, InitiatedByMainFrame::Unknown, loader->isRequestFromClientOrUserInput(), NavigationType::Other, loader->shouldOpenExternalURLsPolicyToPropagate() };
116116
loader->setTriggeringAction(NavigationAction { action });
117117
}
118118

Source/WebCore/page/ContextMenuController.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ static void openNewWindow(const URL& urlToLoad, LocalFrame& frame, Event* event,
263263
frameLoadRequest.setShouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicy);
264264
frameLoadRequest.setNewFrameOpenerPolicy(NewFrameOpenerPolicy::Suppress);
265265

266-
Page* newPage = oldPage->chrome().createWindow(frame, { }, { *frame.document(), frameLoadRequest.resourceRequest(), frameLoadRequest.initiatedByMainFrame() });
266+
Page* newPage = oldPage->chrome().createWindow(frame, { }, { *frame.document(), frameLoadRequest.resourceRequest(), frameLoadRequest.initiatedByMainFrame(), frameLoadRequest.isRequestFromClientOrUserInput() });
267267
if (!newPage)
268268
return;
269269
newPage->chrome().show();

Source/WebKit/Shared/NavigationActionData.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ struct NavigationActionData {
5858
WTF::String downloadAttribute;
5959
WebCore::FloatPoint clickLocationInRootViewCoordinates;
6060
WebCore::ResourceResponse redirectResponse;
61+
bool isRequestFromClientOrUserInput { false };
6162
bool treatAsSameOriginNavigation { false };
6263
bool hasOpenedFrames { false };
6364
bool openedByDOMWithOpener { false };

Source/WebKit/Shared/NavigationActionData.serialization.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct WebKit::NavigationActionData {
3232
WTF::String downloadAttribute;
3333
WebCore::FloatPoint clickLocationInRootViewCoordinates;
3434
WebCore::ResourceResponse redirectResponse;
35+
bool isRequestFromClientOrUserInput;
3536
bool treatAsSameOriginNavigation;
3637
bool hasOpenedFrames;
3738
bool openedByDOMWithOpener;

Source/WebKit/UIProcess/API/APINavigation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class Navigation : public ObjectImpl<Object::Type::Navigation> {
123123
Vector<WTF::URL> takeRedirectChain() { return WTFMove(m_redirectChain); }
124124

125125
bool wasUserInitiated() const { return !!m_lastNavigationAction.userGestureTokenIdentifier; }
126+
bool isRequestFromClientOrUserInput() const { return m_lastNavigationAction.isRequestFromClientOrUserInput; }
126127

127128
bool shouldPerformDownload() const { return !m_lastNavigationAction.downloadAttribute.isNull(); }
128129

Source/WebKit/UIProcess/WebProcessPool.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1998,7 +1998,12 @@ std::tuple<Ref<WebProcessProxy>, SuspendedPageProxy*, ASCIILiteral> WebProcessPo
19981998

19991999
// FIXME: We should support process swap when a window has been opened via window.open() without 'noopener'.
20002000
// The issue is that the opener has a handle to the WindowProxy.
2001-
if (navigation.openedByDOMWithOpener() && !!page.openerFrame() && !(page.preferences().processSwapOnCrossSiteWindowOpenEnabled() || page.preferences().siteIsolationEnabled()))
2001+
//
2002+
// We may allow a process swap to occur even when the window has an opener if the request came from the client
2003+
// (e.g. a location bar navigation as opposed to a link click). If there's substitute data, then the response
2004+
// may be a response generated by the engine, so consider those navigations as non-client-initiated.
2005+
bool isRequestFromClientOrUserInput = navigation.isRequestFromClientOrUserInput() && !navigation.substituteData();
2006+
if (navigation.openedByDOMWithOpener() && !!page.openerFrame() && !(isRequestFromClientOrUserInput || page.preferences().processSwapOnCrossSiteWindowOpenEnabled() || page.preferences().siteIsolationEnabled()))
20022007
return { WTFMove(sourceProcess), nullptr, "Browsing context been opened by DOM without 'noopener'"_s };
20032008

20042009
// FIXME: We should support process swap when a window has opened other windows via window.open.

Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ Page* WebChromeClient::createWindow(LocalFrame& frame, const WindowFeatures& win
325325
navigationAction.downloadAttribute(),
326326
mouseEventData ? mouseEventData->locationInRootViewCoordinates : FloatPoint { },
327327
{ }, /* redirectResponse */
328+
navigationAction.isRequestFromClientOrUserInput(),
328329
false, /* treatAsSameOriginNavigation */
329330
false, /* hasOpenedFrames */
330331
false, /* openedByDOMWithOpener */

Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const Navigat
137137
navigationAction.downloadAttribute(),
138138
mouseEventData ? mouseEventData->locationInRootViewCoordinates : FloatPoint(),
139139
redirectResponse,
140+
navigationAction.isRequestFromClientOrUserInput(),
140141
navigationAction.treatAsSameOriginNavigation(),
141142
navigationAction.hasOpenedFrames(),
142143
navigationAction.openedByDOMWithOpener(),

Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ void WebLocalFrameLoaderClient::didSameDocumentNavigationForFrameViaJSHistoryAPI
471471
{ }, /* downloadAttribute */
472472
{ }, /* clickLocationInRootViewCoordinates */
473473
{ }, /* redirectResponse */
474+
false, /* isRequestFromClientOrUserInput */
474475
true, /* treatAsSameOriginNavigation */
475476
false, /* hasOpenedFrames */
476477
false, /* openedByDOMWithOpener */
@@ -941,6 +942,7 @@ void WebLocalFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(const Nav
941942
navigationAction.downloadAttribute(),
942943
mouseEventData ? mouseEventData->locationInRootViewCoordinates : FloatPoint(),
943944
{ }, /* redirectResponse */
945+
false, /* isRequestFromClientOrUserInput */
944946
false, /* treatAsSameOriginNavigation */
945947
false, /* hasOpenedFrames */
946948
false, /* openedByDOMWithOpener */

Source/WebKit/WebProcess/WebCoreSupport/WebRemoteFrameClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void WebRemoteFrameClient::postMessageToRemote(WebCore::FrameIdentifier source,
7373
void WebRemoteFrameClient::changeLocation(WebCore::FrameLoadRequest&& request)
7474
{
7575
// FIXME: FrameLoadRequest and NavigationAction can probably be refactored to share more. <rdar://116202911>
76-
WebCore::NavigationAction action(request.requester(), request.resourceRequest(), request.initiatedByMainFrame());
76+
WebCore::NavigationAction action(request.requester(), request.resourceRequest(), request.initiatedByMainFrame(), request.isRequestFromClientOrUserInput());
7777
// FIXME: action.request and request are probably duplicate information. <rdar://116203126>
7878
// FIXME: PolicyCheckIdentifier should probably be pushed to another layer. <rdar://116203008>
7979
// FIXME: Get more parameters correct and add tests for each one. <rdar://116203354>

0 commit comments

Comments
 (0)